koishi-plugin-stock 1.0.5 → 1.0.9

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/README.md CHANGED
@@ -1,25 +1,69 @@
1
1
  # koishi-plugin-stock
2
2
 
3
- 一个Koishi插件,当用户发送"活跃市值"时自动获取股票市值数据并回复。
3
+ 一个Koishi插件,当用户发送特定命令时自动获取股票数据并显示结果。支持活跃市值、异动分析、涨停看板和选股功能,并提供指令级黑名单配置。
4
4
 
5
5
  ## 功能
6
6
 
7
- - 用户发送"活跃市值"命令时,自动从 http://stock.svip886.com/api/indexes 获取数据并格式化显示
8
- - 用户发送"异动 [股票代码]"命令时,自动从 http://stock.svip886.com/api/analyze?code=[股票代码] 获取指定股票的异动分析数据
9
- - 用户发送"涨停看板"命令时,自动下载 http://stock.svip886.com/api/limit_up.png 图片并显示
10
- - 用户发送"选股 [策略名称]"命令时,自动从 http://stock.svip886.com/api/dyq_select/[策略API名] 获取选股结果
7
+ - 用户发送"活跃市值"命令时,自动从 `indexes`API获取数据并格式化显示
8
+ - 用户发送"异动 [股票代码]"命令时,自动从 `analyze`API获取指定股票的异动分析数据
9
+ - 用户发送"涨停看板"命令时,自动从 `limit_up`API下载图片并显示
10
+ - 用户发送"选股 [策略名称]"命令时,自动从 `dyq_select` API获取选股结果
11
+ - 用户发送"骑"命令时,自动返回 `images/qi.jpeg` 图片
12
+ - 支持为每个指令单独设置黑名单,可限制特定用户使用特定功能
11
13
  - 自动格式化数据显示给用户
12
14
 
13
15
  ## 安装
14
16
 
15
17
  ```bash
16
- npm install koishi-plugin-market-value
18
+ npm install koishi-plugin-stock
17
19
  ```
18
20
 
19
21
  ## 配置
20
22
 
21
- 此插件无需配置。
23
+ 此插件支持以下配置选项:
24
+
25
+ - `allCommandsBlacklist`: 全部指令黑名单用户ID数组
26
+ - `activeMarketCapBlacklist`: 活跃市值指令黑名单用户ID数组
27
+ - `stockAlertBlacklist`: 异动指令黑名单用户ID数组
28
+ - `limitUpBoardBlacklist`: 涨停看板指令黑名单用户ID数组
29
+ - `stockSelectionBlacklist`: 选股指令黑名单用户ID数组
30
+ - `rideBlacklist`: 骑指令黑名单用户ID数组
22
31
 
23
32
  ## 使用
24
33
 
25
- 在聊天中输入"活跃市值"即可获取最新的市值数据。
34
+ - 发送"活跃市值"获取最新的市场指数数据
35
+ - 发送"异动 [股票代码]"获取指定股票的异动分析,如"异动 000001"
36
+ - 发送"涨停看板"获取涨停股票看板图片
37
+ - 发送"选股 [策略名称或编号]"获取选股结果,支持的策略:N型(1)、填坑(2)、少妇(3)、突破(4)、补票(5)、少妇pro(6)
38
+ - 发送"骑"获取图片
39
+
40
+ 配置黑名单可在插件设置中进行,将特定用户ID添加到相应指令的黑名单中即可限制其使用权限。
41
+
42
+ ## 更新日志
43
+
44
+ ### v1.0.9
45
+ - 添加了"骑"指令,可返回本地图片
46
+
47
+ ### v1.0.8
48
+ - 添加了指令级黑名单功能,可为每个指令单独设置黑名单
49
+
50
+ ### v1.0.7
51
+ - 修复了一些小问题
52
+
53
+ ### v1.0.6
54
+ - 优化了部分功能
55
+
56
+ ### v1.0.5
57
+ - 添加了选股功能的数字编号支持
58
+
59
+ ### v1.0.4
60
+ - 添加了选股功能的数字编号(1-6对应不同策略)
61
+
62
+ ### v1.0.3
63
+ - 添加了选股功能,支持多种选股策略
64
+
65
+ ### v1.0.2
66
+ - 添加了涨停看板功能
67
+
68
+ ### v1.0.1
69
+ - 初始版本,包含活跃市值和异动分析功能
package/images/qi.jpeg ADDED
Binary file
package/lib/index.d.ts CHANGED
@@ -1,5 +1,11 @@
1
1
  import { Context, Schema } from 'koishi';
2
2
  export interface Config {
3
+ activeMarketCapBlacklist?: string[];
4
+ stockAlertBlacklist?: string[];
5
+ limitUpBoardBlacklist?: string[];
6
+ stockSelectionBlacklist?: string[];
7
+ rideBlacklist?: string[];
8
+ allCommandsBlacklist?: string[];
3
9
  }
4
10
  export declare const Config: Schema<Config>;
5
- export declare function apply(ctx: Context): void;
11
+ export declare function apply(ctx: Context, config: Config): void;
package/lib/index.js CHANGED
@@ -3,17 +3,64 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Config = void 0;
4
4
  exports.apply = apply;
5
5
  const koishi_1 = require("koishi");
6
- exports.Config = koishi_1.Schema.object({});
7
- function apply(ctx) {
6
+ exports.Config = koishi_1.Schema.object({
7
+ allCommandsBlacklist: koishi_1.Schema.array(String).description('全部指令黑名单用户ID'),
8
+ activeMarketCapBlacklist: koishi_1.Schema.array(String).description('活跃市值指令黑名单用户ID'),
9
+ stockAlertBlacklist: koishi_1.Schema.array(String).description('异动指令黑名单用户ID'),
10
+ limitUpBoardBlacklist: koishi_1.Schema.array(String).description('涨停看板指令黑名单用户ID'),
11
+ stockSelectionBlacklist: koishi_1.Schema.array(String).description('选股指令黑名单用户ID'),
12
+ rideBlacklist: koishi_1.Schema.array(String).description('骑指令黑名单用户ID'),
13
+ });
14
+ function apply(ctx, config) {
15
+ // 检查用户是否在特定指令的黑名单中
16
+ function isUserInSpecificBlacklist(session, commandName) {
17
+ const userId = session.userId;
18
+ // 检查特定指令黑名单
19
+ switch (commandName) {
20
+ case '活跃市值':
21
+ if (config.activeMarketCapBlacklist?.includes(userId)) {
22
+ return true;
23
+ }
24
+ break;
25
+ case '异动':
26
+ if (config.stockAlertBlacklist?.includes(userId)) {
27
+ return true;
28
+ }
29
+ break;
30
+ case '涨停看板':
31
+ if (config.limitUpBoardBlacklist?.includes(userId)) {
32
+ return true;
33
+ }
34
+ break;
35
+ case '选股':
36
+ if (config.stockSelectionBlacklist?.includes(userId)) {
37
+ return true;
38
+ }
39
+ break;
40
+ case '骑':
41
+ if (config.rideBlacklist?.includes(userId)) {
42
+ return true;
43
+ }
44
+ break;
45
+ }
46
+ // 检查全局黑名单
47
+ if (config.allCommandsBlacklist?.includes(userId)) {
48
+ return true;
49
+ }
50
+ return false;
51
+ }
8
52
  // 监听活跃市值命令
9
53
  ctx.command('活跃市值', '获取活跃市值数据')
10
54
  .action(async ({ session }) => {
55
+ if (isUserInSpecificBlacklist(session, '活跃市值')) {
56
+ return '您已被加入黑名单,无法使用此功能。';
57
+ }
11
58
  try {
12
59
  // 使用Koishi的HTTP服务发起请求获取数据
13
60
  // 根据测试,API返回的是文本格式而非JSON
14
61
  const responseText = await ctx.http.get('http://stock.svip886.com/api/indexes', { responseType: 'text' });
15
62
  // 直接返回API返回的数据
16
- return `📊 活跃市值数据:\n\n${responseText}`;
63
+ return `📊 指数看板:\n\n${responseText}`;
17
64
  }
18
65
  catch (error) {
19
66
  console.error('获取活跃市值数据失败:', error);
@@ -23,6 +70,9 @@ function apply(ctx) {
23
70
  // 监听异动命令,接受股票代码参数
24
71
  ctx.command('异动 <stockCode:text>', '获取指定股票的异动分析数据')
25
72
  .action(async ({ session }, stockCode) => {
73
+ if (isUserInSpecificBlacklist(session, '异动')) {
74
+ return '您已被加入黑名单,无法使用此功能。';
75
+ }
26
76
  if (!stockCode) {
27
77
  return '请输入股票代码,格式:异动 [股票代码]';
28
78
  }
@@ -40,6 +90,9 @@ function apply(ctx) {
40
90
  // 监听涨停看板命令
41
91
  ctx.command('涨停看板', '获取涨停看板图片')
42
92
  .action(async ({ session }) => {
93
+ if (isUserInSpecificBlacklist(session, '涨停看板')) {
94
+ return '您已被加入黑名单,无法使用此功能。';
95
+ }
43
96
  try {
44
97
  // 使用Koishi的HTTP服务下载图片
45
98
  const imageUrl = 'http://stock.svip886.com/api/limit_up.png';
@@ -58,6 +111,9 @@ function apply(ctx) {
58
111
  // 监听选股命令
59
112
  ctx.command('选股 <strategy:text>', '根据指定策略选股(支持策略:N型、填坑、少妇、突破、补票、少妇pro)')
60
113
  .action(async ({ session }, strategy) => {
114
+ if (isUserInSpecificBlacklist(session, '选股')) {
115
+ return '您已被加入黑名单,无法使用此功能。';
116
+ }
61
117
  if (!strategy) {
62
118
  return '请输入选股策略,格式:选股 [策略名称或编号]\n支持的策略:N型(1)、填坑(2)、少妇(3)、突破(4)、补票(5)、少妇pro(6)';
63
119
  }
@@ -98,10 +154,30 @@ function apply(ctx) {
98
154
  return `获取【${strategy}】选股数据失败,请稍后重试。`;
99
155
  }
100
156
  });
157
+ // 监听骑命令
158
+ ctx.command('骑', '获取骑图片')
159
+ .action(async ({ session }) => {
160
+ if (isUserInSpecificBlacklist(session, '骑')) {
161
+ return '您已被加入黑名单,无法使用此功能。';
162
+ }
163
+ try {
164
+ // 使用Koishi的资源系统来访问本地图片
165
+ const imagePath = './images/qi.jpeg';
166
+ // 返回本地图片
167
+ return `<img src="${imagePath}" />`;
168
+ }
169
+ catch (error) {
170
+ console.error('获取骑图片失败:', error);
171
+ return '获取骑图片失败,请稍后重试。';
172
+ }
173
+ });
101
174
  // 使用中间件方式监听特定关键词(作为备用方案)
102
175
  ctx.middleware(async (session, next) => {
103
176
  const content = session.content?.trim();
104
177
  if (content === '活跃市值') {
178
+ if (isUserInSpecificBlacklist(session, '活跃市值')) {
179
+ return '您已被加入黑名单,无法使用此功能。';
180
+ }
105
181
  try {
106
182
  // 使用Koishi的HTTP服务发起请求获取数据
107
183
  const responseText = await ctx.http.get('http://stock.svip886.com/api/indexes', { responseType: 'text' });
@@ -114,6 +190,9 @@ function apply(ctx) {
114
190
  }
115
191
  }
116
192
  else if (content?.startsWith('异动 ')) {
193
+ if (isUserInSpecificBlacklist(session, '异动')) {
194
+ return '您已被加入黑名单,无法使用此功能。';
195
+ }
117
196
  // 解析股票代码
118
197
  const match = content.match(/^异动\s+(.+)$/);
119
198
  if (match) {
@@ -131,6 +210,9 @@ function apply(ctx) {
131
210
  }
132
211
  }
133
212
  else if (content === '涨停看板') {
213
+ if (isUserInSpecificBlacklist(session, '涨停看板')) {
214
+ return '您已被加入黑名单,无法使用此功能。';
215
+ }
134
216
  try {
135
217
  // 使用Koishi的HTTP服务下载图片
136
218
  const imageUrl = 'http://stock.svip886.com/api/limit_up.png';
@@ -147,6 +229,9 @@ function apply(ctx) {
147
229
  }
148
230
  }
149
231
  else if (content?.startsWith('选股 ')) {
232
+ if (isUserInSpecificBlacklist(session, '选股')) {
233
+ return '您已被加入黑名单,无法使用此功能。';
234
+ }
150
235
  // 解析选股策略
151
236
  const match = content.match(/^选股\s+(.+)$/);
152
237
  if (match) {
@@ -189,6 +274,21 @@ function apply(ctx) {
189
274
  }
190
275
  }
191
276
  }
277
+ else if (content === '骑') {
278
+ if (isUserInSpecificBlacklist(session, '骑')) {
279
+ return '您已被加入黑名单,无法使用此功能。';
280
+ }
281
+ try {
282
+ // 使用Koishi的资源系统来访问本地图片
283
+ const imagePath = './images/qi.jpeg';
284
+ // 返回本地图片
285
+ return `<img src="${imagePath}" />`;
286
+ }
287
+ catch (error) {
288
+ console.error('获取骑图片失败:', error);
289
+ return '获取骑图片失败,请稍后重试。';
290
+ }
291
+ }
192
292
  return next();
193
293
  });
194
294
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-stock",
3
- "version": "1.0.5",
4
- "description": "A Koishi plugin that fetches stock data when user sends '活跃市值' or '异动 [stock code]'",
3
+ "version": "1.0.9",
4
+ "description": "A Koishi plugin that fetches stock data and provides market analysis, including active market cap, stock alerts, limit-up board, and stock selection features with configurable blacklists for each command.",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "scripts": {
@@ -18,7 +18,8 @@
18
18
  "./package.json": "./package.json"
19
19
  },
20
20
  "files": [
21
- "lib"
21
+ "lib",
22
+ "images"
22
23
  ],
23
24
  "keywords": [
24
25
  "koishi",