napgram-plugin-slave-market 1.0.0

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.
Files changed (82) hide show
  1. package/README.md +248 -0
  2. package/dist/commands/admin.commands.d.ts +11 -0
  3. package/dist/commands/admin.commands.d.ts.map +1 -0
  4. package/dist/commands/admin.commands.js +268 -0
  5. package/dist/commands/bank.commands.d.ts +13 -0
  6. package/dist/commands/bank.commands.d.ts.map +1 -0
  7. package/dist/commands/bank.commands.js +211 -0
  8. package/dist/commands/base.commands.d.ts +12 -0
  9. package/dist/commands/base.commands.d.ts.map +1 -0
  10. package/dist/commands/base.commands.js +149 -0
  11. package/dist/commands/economy.commands.d.ts +13 -0
  12. package/dist/commands/economy.commands.d.ts.map +1 -0
  13. package/dist/commands/economy.commands.js +221 -0
  14. package/dist/commands/gameplay.commands.d.ts +15 -0
  15. package/dist/commands/gameplay.commands.d.ts.map +1 -0
  16. package/dist/commands/gameplay.commands.js +461 -0
  17. package/dist/commands/index.d.ts +7 -0
  18. package/dist/commands/index.d.ts.map +1 -0
  19. package/dist/commands/index.js +47 -0
  20. package/dist/commands/social.commands.d.ts +13 -0
  21. package/dist/commands/social.commands.d.ts.map +1 -0
  22. package/dist/commands/social.commands.js +305 -0
  23. package/dist/config.d.ts +37 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +35 -0
  26. package/dist/index.d.ts +22 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +57 -0
  29. package/dist/index.mjs +57 -0
  30. package/dist/models/index.d.ts +10 -0
  31. package/dist/models/index.d.ts.map +1 -0
  32. package/dist/models/index.js +40 -0
  33. package/dist/services/admin.service.d.ts +59 -0
  34. package/dist/services/admin.service.d.ts.map +1 -0
  35. package/dist/services/admin.service.js +164 -0
  36. package/dist/services/bank.service.d.ts +74 -0
  37. package/dist/services/bank.service.d.ts.map +1 -0
  38. package/dist/services/bank.service.js +354 -0
  39. package/dist/services/bodyguard.service.d.ts +36 -0
  40. package/dist/services/bodyguard.service.d.ts.map +1 -0
  41. package/dist/services/bodyguard.service.js +102 -0
  42. package/dist/services/cooldown.service.d.ts +33 -0
  43. package/dist/services/cooldown.service.d.ts.map +1 -0
  44. package/dist/services/cooldown.service.js +104 -0
  45. package/dist/services/farm.service.d.ts +61 -0
  46. package/dist/services/farm.service.d.ts.map +1 -0
  47. package/dist/services/farm.service.js +255 -0
  48. package/dist/services/index.d.ts +16 -0
  49. package/dist/services/index.d.ts.map +1 -0
  50. package/dist/services/index.js +15 -0
  51. package/dist/services/market.service.d.ts +58 -0
  52. package/dist/services/market.service.d.ts.map +1 -0
  53. package/dist/services/market.service.js +286 -0
  54. package/dist/services/player.service.d.ts +56 -0
  55. package/dist/services/player.service.d.ts.map +1 -0
  56. package/dist/services/player.service.js +201 -0
  57. package/dist/services/ranking.service.d.ts +28 -0
  58. package/dist/services/ranking.service.d.ts.map +1 -0
  59. package/dist/services/ranking.service.js +71 -0
  60. package/dist/services/redpacket.service.d.ts +63 -0
  61. package/dist/services/redpacket.service.d.ts.map +1 -0
  62. package/dist/services/redpacket.service.js +207 -0
  63. package/dist/services/transaction.service.d.ts +48 -0
  64. package/dist/services/transaction.service.d.ts.map +1 -0
  65. package/dist/services/transaction.service.js +102 -0
  66. package/dist/services/vip.service.d.ts +41 -0
  67. package/dist/services/vip.service.d.ts.map +1 -0
  68. package/dist/services/vip.service.js +167 -0
  69. package/dist/services/work.service.d.ts +49 -0
  70. package/dist/services/work.service.d.ts.map +1 -0
  71. package/dist/services/work.service.js +258 -0
  72. package/dist/types/index.d.ts +62 -0
  73. package/dist/types/index.d.ts.map +1 -0
  74. package/dist/types/index.js +4 -0
  75. package/dist/utils/helpers.d.ts +40 -0
  76. package/dist/utils/helpers.d.ts.map +1 -0
  77. package/dist/utils/helpers.js +88 -0
  78. package/dist/utils/index.d.ts +5 -0
  79. package/dist/utils/index.d.ts.map +1 -0
  80. package/dist/utils/index.js +4 -0
  81. package/napgram-plugin.json +15 -0
  82. package/package.json +56 -0
@@ -0,0 +1,461 @@
1
+ /**
2
+ * 牛马市场和农场命令
3
+ */
4
+ import { createCommand, makeText } from '@napgram/sdk';
5
+ export function registerMarketAndFarmCommands(ctx, config, services) {
6
+ const { playerService, cooldownService, marketService, farmService, bodyguardService } = services;
7
+ // ========== 牛马市场命令 ==========
8
+ // 牛马市场命令
9
+ ctx.command(createCommand({
10
+ name: '牛马市场',
11
+ aliases: ['市场', 'market'],
12
+ description: '查看可购买的玩家',
13
+ handler: async (event) => {
14
+ try {
15
+ const userId = event.sender.userId;
16
+ const player = await playerService.getPlayer(userId);
17
+ if (player?.commandBanned) {
18
+ await event.reply([makeText('❌ 你的命令权限已被禁用')]);
19
+ return;
20
+ }
21
+ const scopeKey = event.channelType === 'group' ? event.channelId : undefined;
22
+ const players = await marketService.getMarketPlayers(scopeKey, 15);
23
+ if (players.length === 0) {
24
+ await event.reply([makeText('🏪 牛马市场\n\n当前没有可购买的玩家!')]);
25
+ return;
26
+ }
27
+ let message = '🏪 牛马市场(自由玩家)\n\n';
28
+ for (let i = 0; i < players.length; i++) {
29
+ const p = players[i];
30
+ message += `${i + 1}. ${p.nickname}\n`;
31
+ message += ` 💎 身价: ${p.worth}\n`;
32
+ message += ` ⏰ 注册: ${Math.floor((Date.now() - Number(p.registerTime)) / 86400000)}天前\n\n`;
33
+ }
34
+ message += `💡 使用\"购买玩家 @用户\"进行购买`;
35
+ await event.reply([makeText(message)]);
36
+ }
37
+ catch (error) {
38
+ await event.reply([makeText(`❌ 查询失败:${error.message}`)]);
39
+ }
40
+ }
41
+ }));
42
+ // 我的牛马命令
43
+ ctx.command(createCommand({
44
+ name: '我的牛马',
45
+ aliases: ['牛马', 'slaves'],
46
+ description: '查看自己拥有的牛马',
47
+ handler: async (event) => {
48
+ try {
49
+ const userId = event.sender.userId;
50
+ const player = await playerService.getPlayer(userId);
51
+ if (!player) {
52
+ await event.reply([makeText('❌ 你还未注册')]);
53
+ return;
54
+ }
55
+ if (player.commandBanned) {
56
+ await event.reply([makeText('❌ 你的命令权限已被禁用')]);
57
+ return;
58
+ }
59
+ const slaves = await playerService.getSlaves(userId);
60
+ if (slaves.length === 0) {
61
+ await event.reply([makeText('你还没有牛马!\n\n💡 使用\"牛马市场\"查看可购买的玩家')]);
62
+ return;
63
+ }
64
+ let message = `🐂 我的牛马 (${slaves.length}个)\n\n`;
65
+ for (let i = 0; i < slaves.length; i++) {
66
+ const s = slaves[i];
67
+ message += `${i + 1}. ${s.nickname}\n`;
68
+ message += ` 💎 身价: ${s.worth}\n`;
69
+ if (s.ownedTime) {
70
+ message += ` ⏰ 购买: ${Math.floor((Date.now() - Number(s.ownedTime)) / 86400000)}天前\n\n`;
71
+ }
72
+ else {
73
+ message += ` ⏰ 购买: 未知\n\n`;
74
+ }
75
+ }
76
+ await event.reply([makeText(message)]);
77
+ }
78
+ catch (error) {
79
+ await event.reply([makeText(`❌ 查询失败:${error.message}`)]);
80
+ }
81
+ }
82
+ }));
83
+ // 购买玩家命令
84
+ ctx.command(createCommand({
85
+ name: '购买玩家',
86
+ aliases: ['购买', 'buy'],
87
+ description: '购买其他玩家成为牛马',
88
+ handler: async (event, args) => {
89
+ try {
90
+ const userId = event.sender.userId;
91
+ const player = await playerService.getPlayer(userId);
92
+ if (!player) {
93
+ await event.reply([makeText('❌ 你还未注册')]);
94
+ return;
95
+ }
96
+ if (player.commandBanned) {
97
+ await event.reply([makeText('❌ 你的命令权限已被禁用')]);
98
+ return;
99
+ }
100
+ const isAdmin = await playerService.isAdmin(userId);
101
+ if (!isAdmin) {
102
+ await cooldownService.ensureReady(userId, '购买');
103
+ }
104
+ const atSegments = event.message.segments.filter(s => s.type === 'at');
105
+ const targetId = atSegments[0]?.data.userId || args[0];
106
+ if (!targetId || targetId === userId) {
107
+ await event.reply([makeText('❌ 请@一个有效的目标玩家')]);
108
+ return;
109
+ }
110
+ const targetPlayer = await playerService.getPlayer(targetId);
111
+ if (!targetPlayer) {
112
+ await event.reply([makeText('❌ 目标玩家不存在')]);
113
+ return;
114
+ }
115
+ const result = await marketService.buyPlayer(userId, targetId, isAdmin);
116
+ await cooldownService.updateCooldown(userId, '购买');
117
+ await event.reply([makeText(`✅ 购买成功!\n\n🐂 购买: ${targetPlayer.nickname}\n💰 花费: ${result.price}\n💵 剩余余额: ${result.newBalance}\n\n现在ta是你的牛马了!`)]);
118
+ }
119
+ catch (error) {
120
+ await event.reply([makeText(`❌ 购买失败:${error.message}`)]);
121
+ }
122
+ }
123
+ }));
124
+ // 放生命令
125
+ ctx.command(createCommand({
126
+ name: '放生',
127
+ aliases: ['释放', 'release'],
128
+ description: '释放牛马恢复其自由身',
129
+ handler: async (event, args) => {
130
+ try {
131
+ const userId = event.sender.userId;
132
+ const player = await playerService.getPlayer(userId);
133
+ if (!player) {
134
+ await event.reply([makeText('❌ 你还未注册')]);
135
+ return;
136
+ }
137
+ if (player.commandBanned) {
138
+ await event.reply([makeText('❌ 你的命令权限已被禁用')]);
139
+ return;
140
+ }
141
+ const atSegments = event.message.segments.filter(s => s.type === 'at');
142
+ const targetId = atSegments[0]?.data.userId || args[0];
143
+ if (!targetId) {
144
+ await event.reply([makeText('❌ 请@要释放的牛马')]);
145
+ return;
146
+ }
147
+ const targetPlayer = await playerService.getPlayer(targetId);
148
+ if (!targetPlayer) {
149
+ await event.reply([makeText('❌ 目标玩家不存在')]);
150
+ return;
151
+ }
152
+ await marketService.releasePlayer(userId, targetId);
153
+ await event.reply([makeText(`✅ 放生成功!\n\n已释放 ${targetPlayer.nickname},ta恢复了自由!`)]);
154
+ }
155
+ catch (error) {
156
+ await event.reply([makeText(`❌ 放生失败:${error.message}`)]);
157
+ }
158
+ }
159
+ }));
160
+ // 赎身命令
161
+ ctx.command(createCommand({
162
+ name: '赎身',
163
+ aliases: ['ransom'],
164
+ description: '支付赎金获得自由',
165
+ handler: async (event) => {
166
+ try {
167
+ const userId = event.sender.userId;
168
+ const player = await playerService.getPlayer(userId);
169
+ if (!player) {
170
+ await event.reply([makeText('❌ 你还未注册')]);
171
+ return;
172
+ }
173
+ if (player.commandBanned) {
174
+ await event.reply([makeText('❌ 你的命令权限已被禁用')]);
175
+ return;
176
+ }
177
+ const result = await marketService.ransom(userId);
178
+ await event.reply([makeText(`✅ 赎身成功!\n\n💸 赎身费: ${result.price}\n💵 剩余余额: ${result.newBalance}\n\n🎉 你自由了!`)]);
179
+ }
180
+ catch (error) {
181
+ await event.reply([makeText(`❌ 赎身失败:${error.message}`)]);
182
+ }
183
+ }
184
+ }));
185
+ // 抢牛马命令
186
+ ctx.command(createCommand({
187
+ name: '抢牛马',
188
+ aliases: ['snatch'],
189
+ description: '强制抢夺其他玩家的牛马',
190
+ handler: async (event, args) => {
191
+ try {
192
+ const userId = event.sender.userId;
193
+ const player = await playerService.getPlayer(userId);
194
+ if (!player) {
195
+ await event.reply([makeText('❌ 你还未注册')]);
196
+ return;
197
+ }
198
+ if (player.commandBanned) {
199
+ await event.reply([makeText('❌ 你的命令权限已被禁用')]);
200
+ return;
201
+ }
202
+ const isAdmin = await playerService.isAdmin(userId);
203
+ if (!isAdmin) {
204
+ await cooldownService.ensureReady(userId, '购买');
205
+ }
206
+ const atSegments = event.message.segments.filter(s => s.type === 'at');
207
+ const targetId = atSegments[0]?.data.userId || args[0];
208
+ if (!targetId || targetId === userId) {
209
+ await event.reply([makeText('❌ 请@一个有效的目标玩家')]);
210
+ return;
211
+ }
212
+ const targetPlayer = await playerService.getPlayer(targetId);
213
+ if (!targetPlayer) {
214
+ await event.reply([makeText('❌ 目标玩家不存在')]);
215
+ return;
216
+ }
217
+ const result = await marketService.snatchPlayer(userId, targetId, isAdmin);
218
+ await cooldownService.updateCooldown(userId, '购买');
219
+ await event.reply([makeText(`✅ 抢牛马成功!\n\n🐂 抢得: ${targetPlayer.nickname}\n💰 花费: ${result.price}\n💵 剩余余额: ${result.newBalance}`)]);
220
+ }
221
+ catch (error) {
222
+ await event.reply([makeText(`❌ 抢牛马失败:${error.message}`)]);
223
+ }
224
+ }
225
+ }));
226
+ // ========== 农场系统 ==========
227
+ // 开地命令
228
+ ctx.command(createCommand({
229
+ name: '开地',
230
+ aliases: ['buy-land'],
231
+ description: '购买新地块',
232
+ handler: async (event) => {
233
+ try {
234
+ const userId = event.sender.userId;
235
+ const player = await playerService.getPlayer(userId);
236
+ if (!player) {
237
+ await event.reply([makeText('❌ 你还未注册')]);
238
+ return;
239
+ }
240
+ if (player.commandBanned) {
241
+ await event.reply([makeText('❌ 你的命令权限已被禁用')]);
242
+ return;
243
+ }
244
+ const isAdmin = await playerService.isAdmin(userId);
245
+ const result = await farmService.buyLand(userId, isAdmin);
246
+ await event.reply([makeText(`✅ 开地成功!\n\n🌾 地块编号: ${result.plotIndex}\n💰 花费: ${result.cost}\n💵 剩余余额: ${result.newBalance}\n\n💡 使用\"种地\"开始种植`)]);
247
+ }
248
+ catch (error) {
249
+ await event.reply([makeText(`❌ 开地失败:${error.message}`)]);
250
+ }
251
+ }
252
+ }));
253
+ // 种地命令
254
+ ctx.command(createCommand({
255
+ name: '种地',
256
+ aliases: ['plant'],
257
+ description: '在地块上种植作物',
258
+ handler: async (event, args) => {
259
+ try {
260
+ const userId = event.sender.userId;
261
+ const player = await playerService.getPlayer(userId);
262
+ if (!player) {
263
+ await event.reply([makeText('❌ 你还未注册')]);
264
+ return;
265
+ }
266
+ if (player.commandBanned) {
267
+ await event.reply([makeText('❌ 你的命令权限已被禁用')]);
268
+ return;
269
+ }
270
+ const crop = args[0] || '小麦';
271
+ const plotIndex = args[1] ? Number(args[1]) : undefined;
272
+ if (plotIndex !== undefined && (isNaN(plotIndex) || plotIndex < 1)) {
273
+ await event.reply([makeText('❌ 地块编号无效')]);
274
+ return;
275
+ }
276
+ const validCrops = ['小麦', '玉米', '土豆', '胡萝卜', '番茄', '黄瓜', '茄子', '辣椒'];
277
+ if (!validCrops.includes(crop)) {
278
+ await event.reply([makeText(`❌ 作物类型错误\n\n可选作物:${validCrops.join('、')}`)]);
279
+ return;
280
+ }
281
+ const isAdmin = await playerService.isAdmin(userId);
282
+ const result = await farmService.plantCrop(userId, crop, plotIndex, isAdmin);
283
+ await event.reply([makeText(`✅ 种植成功!\n\n🌾 作物: ${crop}\n📍 地块: ${result.plotsPlanted.join(', ')}\n💰 花费: ${result.cost}\n💵 剩余余额: ${result.newBalance}\n\n💡 到时使用\"收获\"收割作物`)]);
284
+ }
285
+ catch (error) {
286
+ await event.reply([makeText(`❌ 种植失败:${error.message}`)]);
287
+ }
288
+ }
289
+ }));
290
+ // 收获命令
291
+ ctx.command(createCommand({
292
+ name: '收获',
293
+ aliases: ['harvest'],
294
+ description: '收获成熟的作物',
295
+ handler: async (event) => {
296
+ try {
297
+ const userId = event.sender.userId;
298
+ const player = await playerService.getPlayer(userId);
299
+ if (!player) {
300
+ await event.reply([makeText('❌ 你还未注册')]);
301
+ return;
302
+ }
303
+ if (player.commandBanned) {
304
+ await event.reply([makeText('❌ 你的命令权限已被禁用')]);
305
+ return;
306
+ }
307
+ const result = await farmService.harvestCrops(userId);
308
+ if (result.harvested.length === 0) {
309
+ await event.reply([makeText('❌ 没有可收获的作物\n\n💡 使用\"地块状态\"查看农场')]);
310
+ return;
311
+ }
312
+ let message = `✅ 收获成功!\n\n`;
313
+ message += `🌾 收获数量: ${result.harvested.length} 块地\n`;
314
+ message += `💰 总收入: ${result.totalIncome}\n`;
315
+ message += `💵 当前余额: ${result.newBalance}\n\n`;
316
+ message += `收获详情:\n`;
317
+ for (const h of result.harvested) {
318
+ message += ` 地块${h.plotIndex}: ${h.cropName} → ${h.income}金币\n`;
319
+ }
320
+ await event.reply([makeText(message)]);
321
+ }
322
+ catch (error) {
323
+ await event.reply([makeText(`❌ 收获失败:${error.message}`)]);
324
+ }
325
+ }
326
+ }));
327
+ // 地块状态命令
328
+ ctx.command(createCommand({
329
+ name: '地块状态',
330
+ aliases: ['farm', 'land'],
331
+ description: '查看农场地块状态',
332
+ handler: async (event) => {
333
+ try {
334
+ const userId = event.sender.userId;
335
+ const player = await playerService.getPlayer(userId);
336
+ if (!player) {
337
+ await event.reply([makeText('❌ 你还未注册')]);
338
+ return;
339
+ }
340
+ if (player.commandBanned) {
341
+ await event.reply([makeText('❌ 你的命令权限已被禁用')]);
342
+ return;
343
+ }
344
+ const lands = await farmService.getPlayerLands(userId);
345
+ if (lands.length === 0) {
346
+ await event.reply([makeText('🌾 农场状态\n\n你还没有地块!\n\n💡 使用\"开地\"购买地块')]);
347
+ return;
348
+ }
349
+ const now = Date.now();
350
+ let message = `🌾 农场状态 (${lands.length}块地)\n\n`;
351
+ for (const land of lands) {
352
+ message += `📍 地块${land.plotIndex}:\n`;
353
+ if (land.cropType) {
354
+ message += ` 作物: ${land.cropType}\n`;
355
+ const harvestTime = Number(land.harvestTime || 0);
356
+ if (harvestTime <= now) {
357
+ message += ` 状态: ✅ 可收获\n`;
358
+ }
359
+ else {
360
+ const remaining = Math.ceil((harvestTime - now) / 60000);
361
+ message += ` 状态: 🌱 生长中 (${remaining}分钟)\n`;
362
+ }
363
+ }
364
+ else {
365
+ message += ` 状态: 空闲\n`;
366
+ }
367
+ message += `\n`;
368
+ }
369
+ message += `💡 使用\"种地\"种植,\"收获\"收割`;
370
+ await event.reply([makeText(message)]);
371
+ }
372
+ catch (error) {
373
+ await event.reply([makeText(`❌ 查询失败:${error.message}`)]);
374
+ }
375
+ }
376
+ }));
377
+ // ========== 保镖系统 ==========
378
+ // 保镖市场命令
379
+ ctx.command(createCommand({
380
+ name: '保镖市场',
381
+ aliases: ['bodyguards'],
382
+ description: '查看可雇佣的保镖',
383
+ handler: async (event) => {
384
+ try {
385
+ const userId = event.sender.userId;
386
+ const player = await playerService.getPlayer(userId);
387
+ if (player?.commandBanned) {
388
+ await event.reply([makeText('❌ 你的命令权限已被禁用')]);
389
+ return;
390
+ }
391
+ const message = bodyguardService.formatBodyguardList();
392
+ await event.reply([makeText(message)]);
393
+ }
394
+ catch (error) {
395
+ await event.reply([makeText(`❌ 查询失败:${error.message}`)]);
396
+ }
397
+ }
398
+ }));
399
+ // 雇佣保镖命令
400
+ ctx.command(createCommand({
401
+ name: '雇佣保镖',
402
+ aliases: ['hire'],
403
+ description: '雇佣保镖保护自己',
404
+ handler: async (event, args) => {
405
+ try {
406
+ const userId = event.sender.userId;
407
+ const player = await playerService.getPlayer(userId);
408
+ if (!player) {
409
+ await event.reply([makeText('❌ 你还未注册')]);
410
+ return;
411
+ }
412
+ if (player.commandBanned) {
413
+ await event.reply([makeText('❌ 你的命令权限已被禁用')]);
414
+ return;
415
+ }
416
+ const name = args[0];
417
+ if (!name) {
418
+ await event.reply([makeText('❌ 用法:雇佣保镖 <名称>')]);
419
+ return;
420
+ }
421
+ const isAdmin = await playerService.isAdmin(userId);
422
+ const result = await bodyguardService.hireBodyguard(userId, name, isAdmin);
423
+ await event.reply([makeText(`✅ 雇佣成功!\n\n🛡️ 保镖: ${name}\n⏰ 时长: ${result.duration}分钟\n💰 费用: ${result.cost}\n💵 剩余余额: ${result.newBalance}\n\n保镖将保护你免受抢劫!`)]);
424
+ }
425
+ catch (error) {
426
+ await event.reply([makeText(`❌ 雇佣失败:${error.message}`)]);
427
+ }
428
+ }
429
+ }));
430
+ // 保镖状态命令
431
+ ctx.command(createCommand({
432
+ name: '保镖状态',
433
+ aliases: ['bodyguard'],
434
+ description: '查看当前保镖信息',
435
+ handler: async (event) => {
436
+ try {
437
+ const userId = event.sender.userId;
438
+ const player = await playerService.getPlayer(userId);
439
+ if (!player) {
440
+ await event.reply([makeText('❌ 你还未注册')]);
441
+ return;
442
+ }
443
+ if (player.commandBanned) {
444
+ await event.reply([makeText('❌ 你的命令权限已被禁用')]);
445
+ return;
446
+ }
447
+ if (!player.bodyguardName || !player.bodyguardEndTime || Number(player.bodyguardEndTime) <= Date.now()) {
448
+ await event.reply([makeText('🛡️ 保镖状态\n\n当前没有保镖\n\n💡 使用\"保镖市场\"查看可雇佣保镖')]);
449
+ return;
450
+ }
451
+ const remaining = Math.ceil((Number(player.bodyguardEndTime) - Date.now()) / 60000);
452
+ const hours = Math.floor(remaining / 60);
453
+ const minutes = remaining % 60;
454
+ await event.reply([makeText(`🛡️ 保镖状态\n\n保镖: ${player.bodyguardName}\n⏰ 剩余: ${hours}小时${minutes}分钟\n\n你处于保镖的保护中!`)]);
455
+ }
456
+ catch (error) {
457
+ await event.reply([makeText(`❌ 查询失败:${error.message}`)]);
458
+ }
459
+ }
460
+ }));
461
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 命令注册中心
3
+ */
4
+ import type { PluginContext } from '@napgram/sdk';
5
+ import type { SlaveMarketConfig } from '../config';
6
+ export declare function registerCommands(ctx: PluginContext, config: SlaveMarketConfig): void;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAsBnD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,QAuC7E"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * 命令注册中心
3
+ */
4
+ import { PlayerService, CooldownService, TransactionService, BankService, WorkService, MarketService, FarmService, BodyguardService, VipService, RedPacketService, RankingService, AdminService, } from '../services';
5
+ import { registerBaseCommands } from './base.commands';
6
+ import { registerBankCommands } from './bank.commands';
7
+ import { registerEconomyCommands } from './economy.commands';
8
+ import { registerMarketAndFarmCommands } from './gameplay.commands';
9
+ import { registerSocialCommands } from './social.commands';
10
+ import { registerAdminCommands } from './admin.commands';
11
+ export function registerCommands(ctx, config) {
12
+ // 初始化服务
13
+ const playerService = new PlayerService(ctx, config);
14
+ const cooldownService = new CooldownService(ctx, config);
15
+ const transactionService = new TransactionService(ctx);
16
+ const bankService = new BankService(ctx, config, transactionService);
17
+ const workService = new WorkService(ctx, config, transactionService, playerService);
18
+ const marketService = new MarketService(ctx, config, transactionService, playerService);
19
+ const farmService = new FarmService(ctx, config, transactionService);
20
+ const bodyguardService = new BodyguardService(ctx, config, transactionService);
21
+ const vipService = new VipService(ctx, config, transactionService);
22
+ const redPacketService = new RedPacketService(ctx, config, transactionService);
23
+ const rankingService = new RankingService(ctx);
24
+ const adminService = new AdminService(ctx, config);
25
+ const services = {
26
+ playerService,
27
+ cooldownService,
28
+ transactionService,
29
+ bankService,
30
+ workService,
31
+ marketService,
32
+ farmService,
33
+ bodyguardService,
34
+ vipService,
35
+ redPacketService,
36
+ rankingService,
37
+ adminService,
38
+ };
39
+ // 注册各模块命令
40
+ registerBaseCommands(ctx, config, services);
41
+ registerBankCommands(ctx, config, services);
42
+ registerEconomyCommands(ctx, config, services);
43
+ registerMarketAndFarmCommands(ctx, config, services);
44
+ registerSocialCommands(ctx, config, services);
45
+ registerAdminCommands(ctx, config, services);
46
+ ctx.logger.info('[slave-market] All commands registered');
47
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 社交功能命令 - VIP、红包、排行榜
3
+ */
4
+ import type { PluginContext } from '@napgram/sdk';
5
+ import type { SlaveMarketConfig } from '../config';
6
+ import { PlayerService, VipService, RedPacketService, RankingService } from '../services';
7
+ export declare function registerSocialCommands(ctx: PluginContext, config: SlaveMarketConfig, services: {
8
+ playerService: PlayerService;
9
+ vipService: VipService;
10
+ redPacketService: RedPacketService;
11
+ rankingService: RankingService;
12
+ }): void;
13
+ //# sourceMappingURL=social.commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social.commands.d.ts","sourceRoot":"","sources":["../../src/commands/social.commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EACH,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,cAAc,EACjB,MAAM,aAAa,CAAC;AAErB,wBAAgB,sBAAsB,CAClC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE;IACN,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;CAClC,QA2WJ"}