nexushub-commands 2.6.0 → 2.7.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.
@@ -125,7 +125,7 @@ let DepositCommand = DepositCommand_1 = class DepositCommand extends evogram_1.C
125
125
  message: order.card ?
126
126
  `<b>💳 Реквизиты:</b> <code>${maskExceptLast4(order.card.requisites)}</code>\n` +
127
127
  `<b>👩🏻‍💼 Получатель:</b> ${order.card.holder || '-'}`
128
- : '',
128
+ : order.qrcode ? '<b>📸 Метод:</b> QR-code' : '',
129
129
  keyboard: [[{ text: '🚀 Оплатить счет', callback_data: `PaidOrderCommand?orderId=${order.id}` }]],
130
130
  }, {
131
131
  thumbnail: 'https://i.ibb.co/MDrGBbQR/image.png',
@@ -343,6 +343,7 @@ tslib_1.__decorate([
343
343
  const keyboard = [
344
344
  buttons.slice(0, 3), // Первый ряд
345
345
  buttons.slice(3, 6), // Второй ряд
346
+ [{ text: 'Своя сумма', command: DepositCommand, payload: Object.assign(Object.assign({}, args), { suggestedDepositAmounts: false }) }],
346
347
  ].filter((row) => row.length > 0); // Убираем пустые ряды
347
348
  return (yield context.sendFormattedQuestion({
348
349
  //@ts-ignore
@@ -352,7 +353,7 @@ tslib_1.__decorate([
352
353
  error: error === null || error === void 0 ? void 0 : error.message,
353
354
  }, {
354
355
  reply_markup: {
355
- inline_keyboard: keyboard,
356
+ inline_keyboard: args.suggestedDepositAmounts === false ? undefined : keyboard,
356
357
  },
357
358
  })).text;
358
359
  }),
@@ -25,6 +25,7 @@ let GetDepositOrderCommand = class GetDepositOrderCommand extends evogram_1.Comm
25
25
  {
26
26
  title: 'ℹ️ Информация о счете',
27
27
  data: [
28
+ ['ID', `{{ ${order.id} }}`],
28
29
  ['Сумма', `{{ ${Number(order.amount).toLocaleString('ru')} ${order.currency} }}`],
29
30
  ['Дата', `{{ ${new Date().toLocaleString('ru')} }}`],
30
31
  ],
@@ -49,7 +50,7 @@ let GetDepositOrderCommand = class GetDepositOrderCommand extends evogram_1.Comm
49
50
  body: [
50
51
  {
51
52
  title: 'ℹ️ Информация о реквизитах',
52
- data: [['Реквизиты', `{{ ${order.card.requisites} }}`], order.card.bank && ['Банк', `{{ ${order.card.bank} }}`], order.card.holder && ['Получатель', `{{ ${order.card.holder} }}`], ['Сумма оплаты', `{{ ${Number(order.amount).toLocaleString('ru')} ${order.currency} }}`]],
53
+ data: [['ID', `{{ ${order.id} }}`], ['Реквизиты', `{{ ${order.card.requisites} }}`], order.card.bank && ['Банк', `{{ ${order.card.bank} }}`], order.card.holder && ['Получатель', `{{ ${order.card.holder} }}`], ['Сумма оплаты', `{{ ${Number(order.amount).toLocaleString('ru')} ${order.currency} }}`]],
53
54
  },
54
55
  ],
55
56
  footer: '<i>Реквизиты действительны 10 минут.</i>',
@@ -69,7 +70,7 @@ let GetDepositOrderCommand = class GetDepositOrderCommand extends evogram_1.Comm
69
70
  designImages: order.qrcode.qrcode ? undefined : ['deposit-qrcode', 'deposit'],
70
71
  photo: order.qrcode.qrcode || config.images.deposit,
71
72
  // prettier-ignore
72
- header: '<blockquote><b>📥 Создана заявка на пополнение</b></blockquote>' +
73
+ header: `<blockquote><b>📥 Создана заявка на пополнение [ID {{ ${order.id} }}]</b></blockquote>` +
73
74
  (!order.qrcode.link ? '\n\n<b>Сохраните данный QR-код на устройство и загрузите его в приложение банка для оплаты.</b>' : ''),
74
75
  footer: `<i>Заявка действительна ${Math.ceil((new Date(order.expiresAt).getTime() - new Date().getTime()) / 60000)} минут.</i>`,
75
76
  }, {
package/lib/convert.js CHANGED
@@ -24,6 +24,19 @@ Number.prototype.convert = function (params) {
24
24
  const { to = 'RUB', from = 'RUB', round, ceiled } = params;
25
25
  const fromCurrency = from.toUpperCase();
26
26
  const currency = to.toUpperCase();
27
+ if (fromCurrency === 'TRX') {
28
+ const rates = yield CoinBase_service_1.CoinBaseService.getInstance().getRates(fromCurrency);
29
+ const targetRate = rates[currency];
30
+ let convertedAmount = this * Number(targetRate);
31
+ if (!convertedAmount)
32
+ convertedAmount = this;
33
+ if (round)
34
+ convertedAmount = Math.round(convertedAmount);
35
+ else if (ceiled)
36
+ convertedAmount = Math.ceil(convertedAmount);
37
+ //@ts-ignore
38
+ return new ConvertedNumber(convertedAmount, `${convertedAmount.toLocaleString('ru', { maximumFractionDigits: 2 })} ${currency}`);
39
+ }
27
40
  if (currency === 'RUB' && fromCurrency === 'RUB') {
28
41
  const value = round ? Math.round(this) : ceiled ? Math.ceil(this) : this;
29
42
  //@ts-ignore
@@ -35,12 +48,10 @@ Number.prototype.convert = function (params) {
35
48
  let convertedAmount = this * Number(targetRate);
36
49
  if (!convertedAmount)
37
50
  convertedAmount = this;
38
- if (round) {
51
+ if (round)
39
52
  convertedAmount = Math.round(convertedAmount);
40
- }
41
- else if (ceiled) {
53
+ else if (ceiled)
42
54
  convertedAmount = Math.ceil(convertedAmount);
43
- }
44
55
  //@ts-ignore
45
56
  return new ConvertedNumber(convertedAmount, `${convertedAmount.toLocaleString('ru', { maximumFractionDigits: 2 })} ${currency}`);
46
57
  }
@@ -49,12 +60,10 @@ Number.prototype.convert = function (params) {
49
60
  let convertedAmount = this * Number(targetRate);
50
61
  if (!convertedAmount)
51
62
  convertedAmount = this;
52
- if (round) {
63
+ if (round)
53
64
  convertedAmount = Math.round(convertedAmount);
54
- }
55
- else if (ceiled) {
65
+ else if (ceiled)
56
66
  convertedAmount = Math.ceil(convertedAmount);
57
- }
58
67
  //@ts-ignore
59
68
  return new ConvertedNumber(convertedAmount, `${convertedAmount.toLocaleString('ru', { maximumFractionDigits: 2 })} ${targetRate ? currency : 'RUB'}`);
60
69
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexushub-commands",
3
- "version": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "main": "./lib/index.js",
5
5
  "license": "MIT",
6
6
  "dependencies": {
@@ -49,7 +49,7 @@ export class DepositCommand extends Command {
49
49
  reply_markup: {
50
50
  inline_keyboard: [...(allowedMethods.includes('card') ? [[{ text: '💳 Банковская карта', command: DepositCommand, payload: { method: 'card' } }]] : []), [{ text: '🪙 Криптовалюта', command: DepositCommand, payload: { method: 'cryptowallet' } }], [{ text: '🎫 Промокод', command: DepositByPromocodeCommand }]],
51
51
  },
52
- }
52
+ },
53
53
  )
54
54
  } else if (value === 'cryptowallet') {
55
55
  await context.sendFormatted(
@@ -67,7 +67,7 @@ export class DepositCommand extends Command {
67
67
  ],
68
68
  ],
69
69
  },
70
- }
70
+ },
71
71
  )
72
72
  }
73
73
  })
@@ -97,7 +97,7 @@ export class DepositCommand extends Command {
97
97
  },
98
98
  ]),
99
99
  },
100
- }
100
+ },
101
101
  )
102
102
  } else {
103
103
  const wallets = await config.API.get(`/crypto/coins/${value}/wallets`).then((x) => x.data)
@@ -122,7 +122,7 @@ export class DepositCommand extends Command {
122
122
  },
123
123
  ]),
124
124
  },
125
- }
125
+ },
126
126
  )
127
127
  }
128
128
  })
@@ -236,6 +236,7 @@ export class DepositCommand extends Command {
236
236
  const keyboard = [
237
237
  buttons.slice(0, 3), // Первый ряд
238
238
  buttons.slice(3, 6), // Второй ряд
239
+ [{ text: 'Своя сумма', command: DepositCommand, payload: { ...args, suggestedDepositAmounts: false } }],
239
240
  ].filter((row) => row.length > 0) // Убираем пустые ряды
240
241
 
241
242
  return (
@@ -249,9 +250,9 @@ export class DepositCommand extends Command {
249
250
  },
250
251
  {
251
252
  reply_markup: {
252
- inline_keyboard: keyboard,
253
+ inline_keyboard: args.suggestedDepositAmounts === false ? undefined : keyboard,
253
254
  },
254
- }
255
+ },
255
256
  )
256
257
  ).text
257
258
  },
@@ -277,9 +278,9 @@ export class DepositCommand extends Command {
277
278
  if (Number(value) < Number(validateArgs.minAmount)) throw new Error(`Минимальная сумма пополнения: ${Number(validateArgs.minAmount).toLocaleString('ru')} ${config.currency}`)
278
279
 
279
280
  return value
280
- }
281
+ },
281
282
  )
282
- deposit: number
283
+ deposit: number,
283
284
  ) {
284
285
  const config = Client.config(context)
285
286
  let interval: NodeJS.Timeout
@@ -362,7 +363,7 @@ export class DepositCommand extends Command {
362
363
  reply_markup: {
363
364
  inline_keyboard: [[{ text: `💸 Пополнить на ${await minAmount.convert({ from: 'RUB', to: config.currency })}`, command: DepositCommand, payload: { method: 'card', deposit: minAmount } }]],
364
365
  },
365
- }
366
+ },
366
367
  )
367
368
  }
368
369
  }
@@ -378,7 +379,7 @@ export class DepositCommand extends Command {
378
379
  reply_markup: {
379
380
  inline_keyboard: [[{ text: '👩‍💻 Поддержка', url: `t.me/${config.support.username}` }]],
380
381
  },
381
- }
382
+ },
382
383
  )
383
384
  }
384
385
 
@@ -391,7 +392,7 @@ export class DepositCommand extends Command {
391
392
  from: order.currency,
392
393
  to: 'RUB',
393
394
  ceiled: true,
394
- })})`
395
+ })})`
395
396
  : ``
396
397
  }`,
397
398
  {
@@ -400,12 +401,12 @@ export class DepositCommand extends Command {
400
401
  order.card ?
401
402
  `<b>💳 Реквизиты:</b> <code>${maskExceptLast4(order.card.requisites)}</code>\n` +
402
403
  `<b>👩🏻‍💼 Получатель:</b> ${order.card.holder || '-'}`
403
- : '',
404
+ : order.qrcode ? '<b>📸 Метод:</b> QR-code' : '',
404
405
  keyboard: [[{ text: '🚀 Оплатить счет', callback_data: `PaidOrderCommand?orderId=${order.id}` }]],
405
406
  },
406
407
  {
407
408
  thumbnail: 'https://i.ibb.co/MDrGBbQR/image.png',
408
- }
409
+ },
409
410
  )
410
411
 
411
412
  if (Number(deposit) !== Number(order.amount) && method !== 'cryptoWallet') {
@@ -418,26 +419,29 @@ export class DepositCommand extends Command {
418
419
  reply_markup: {
419
420
  inline_keyboard: [[{ text: '📖 Да, я все понял, продолжить', command: GetDepositOrderCommand, payload: { orderId: order.id } }]],
420
421
  },
421
- }
422
+ },
422
423
  )
423
424
  }
424
425
 
425
- setTimeout(async () => {
426
- const neworder = await config.API.get(`/orders/${order.id}`).then((x) => x.data)
427
- if (['paid', 'fakepaid'].includes(neworder.status) || neworder.cheque) return
426
+ setTimeout(
427
+ async () => {
428
+ const neworder = await config.API.get(`/orders/${order.id}`).then((x) => x.data)
429
+ if (['paid', 'fakepaid'].includes(neworder.status) || neworder.cheque) return
428
430
 
429
- const msgInfo = await context.client.database.config.get(`order${order.id}`)
430
- if (!msgInfo) return
431
+ const msgInfo = await context.client.database.config.get(`order${order.id}`)
432
+ if (!msgInfo) return
431
433
 
432
- context.client.api.deleteMessage({ chat_id: msgInfo.value.chatId, message_id: msgInfo.value.messageId })
433
- context.sendFormatted({
434
- designImages: ['deposit-time-expired', 'deposit'],
435
- header: `<blockquote><b>⚠️ Время на оплату истекло</b></blockquote>\n\n<i>Мы не получили пополнение по нашим реквизитам. Они больше недоступны для пополнения</i>\n\n<b>ℹ️ Если Вы оплатили, а система не определила Ваш перевод - <a href="t.me/${context.mirror.projectMirror.design.supportBot?.username}">обратитесь в тех. поддержку</a></b>`,
436
- reply_markup: {
437
- inline_keyboard: [[{ text: '🔄 Проверить оплату', command: CheckPaidOrderCommand, payload: { orderId: order.id } }]],
438
- },
439
- })
440
- }, new Date(order.expiresAt).getTime() - new Date().getTime())
434
+ context.client.api.deleteMessage({ chat_id: msgInfo.value.chatId, message_id: msgInfo.value.messageId })
435
+ context.sendFormatted({
436
+ designImages: ['deposit-time-expired', 'deposit'],
437
+ header: `<blockquote><b>⚠️ Время на оплату истекло</b></blockquote>\n\n<i>Мы не получили пополнение по нашим реквизитам. Они больше недоступны для пополнения</i>\n\n<b>ℹ️ Если Вы оплатили, а система не определила Ваш перевод - <a href="t.me/${context.mirror.projectMirror.design.supportBot?.username}">обратитесь в тех. поддержку</a></b>`,
438
+ reply_markup: {
439
+ inline_keyboard: [[{ text: '🔄 Проверить оплату', command: CheckPaidOrderCommand, payload: { orderId: order.id } }]],
440
+ },
441
+ })
442
+ },
443
+ new Date(order.expiresAt).getTime() - new Date().getTime(),
444
+ )
441
445
  }
442
446
 
443
447
  context.redirect(GetDepositOrderCommand, { orderId: order.id, repeat: order.isRepeat })
@@ -25,6 +25,7 @@ export class GetDepositOrderCommand extends Command {
25
25
  {
26
26
  title: 'ℹ️ Информация о счете',
27
27
  data: [
28
+ ['ID', `{{ ${order.id} }}`],
28
29
  ['Сумма', `{{ ${Number(order.amount).toLocaleString('ru')} ${order.currency} }}`],
29
30
  ['Дата', `{{ ${new Date().toLocaleString('ru')} }}`],
30
31
  ],
@@ -40,7 +41,7 @@ export class GetDepositOrderCommand extends Command {
40
41
  reply_markup: {
41
42
  inline_keyboard: [[{ text: '🔗 Перейти к оплате', url: order.cryptoBot.url }], [{ text: '🔄 Проверить оплату', command: CheckPaidOrderCommand, payload: { orderId: order.id } }]],
42
43
  },
43
- }
44
+ },
44
45
  )
45
46
 
46
47
  break
@@ -53,7 +54,7 @@ export class GetDepositOrderCommand extends Command {
53
54
  body: [
54
55
  {
55
56
  title: 'ℹ️ Информация о реквизитах',
56
- data: [['Реквизиты', `{{ ${order.card.requisites} }}`], order.card.bank && ['Банк', `{{ ${order.card.bank} }}`], order.card.holder && ['Получатель', `{{ ${order.card.holder} }}`], ['Сумма оплаты', `{{ ${Number(order.amount).toLocaleString('ru')} ${order.currency} }}`]],
57
+ data: [['ID', `{{ ${order.id} }}`], ['Реквизиты', `{{ ${order.card.requisites} }}`], order.card.bank && ['Банк', `{{ ${order.card.bank} }}`], order.card.holder && ['Получатель', `{{ ${order.card.holder} }}`], ['Сумма оплаты', `{{ ${Number(order.amount).toLocaleString('ru')} ${order.currency} }}`]],
57
58
  },
58
59
  ],
59
60
  footer: '<i>Реквизиты действительны 10 минут.</i>',
@@ -67,7 +68,7 @@ export class GetDepositOrderCommand extends Command {
67
68
  ],
68
69
  ],
69
70
  },
70
- }
71
+ },
71
72
  )
72
73
  break
73
74
  case 'qrcode':
@@ -77,7 +78,7 @@ export class GetDepositOrderCommand extends Command {
77
78
  photo: order.qrcode.qrcode || config.images.deposit,
78
79
  // prettier-ignore
79
80
  header:
80
- '<blockquote><b>📥 Создана заявка на пополнение</b></blockquote>' +
81
+ `<blockquote><b>📥 Создана заявка на пополнение [ID {{ ${order.id} }}]</b></blockquote>` +
81
82
 
82
83
  (!order.qrcode.link ? '\n\n<b>Сохраните данный QR-код на устройство и загрузите его в приложение банка для оплаты.</b>' : ''),
83
84
  footer: `<i>Заявка действительна ${Math.ceil((new Date(order.expiresAt).getTime() - new Date().getTime()) / 60000)} минут.</i>`,
@@ -92,7 +93,7 @@ export class GetDepositOrderCommand extends Command {
92
93
  ],
93
94
  ],
94
95
  },
95
- }
96
+ },
96
97
  )
97
98
  break
98
99
  case 'crypto':
@@ -122,7 +123,7 @@ export class GetDepositOrderCommand extends Command {
122
123
  ],
123
124
  ],
124
125
  },
125
- }
126
+ },
126
127
  )
127
128
  break
128
129
  }
package/src/convert.ts CHANGED
@@ -1,91 +1,99 @@
1
- import { CoinBaseService } from './utils/CoinBase.service';
1
+ import { CoinBaseService } from './utils/CoinBase.service'
2
2
 
3
3
  interface ConvertParams {
4
- from?: string;
5
- to: string;
6
- round?: boolean;
7
- ceiled?: boolean;
4
+ from?: string
5
+ to: string
6
+ round?: boolean
7
+ ceiled?: boolean
8
8
  }
9
9
 
10
10
  interface CurrencyConverter {
11
- convert(params: ConvertParams): Promise<number>;
11
+ convert(params: ConvertParams): Promise<number>
12
12
  }
13
13
 
14
14
  class ConvertedNumber {
15
- private value: number;
16
- private stringValue: string;
15
+ private value: number
16
+ private stringValue: string
17
17
 
18
18
  constructor(value: number, stringValue: string) {
19
- this.value = value;
20
- this.stringValue = stringValue;
19
+ this.value = value
20
+ this.stringValue = stringValue
21
21
  }
22
22
 
23
23
  // Переопределяем метод toString
24
24
  toString() {
25
- return this.stringValue;
25
+ return this.stringValue
26
26
  }
27
27
 
28
28
  // Добавляем valueOf для корректного сравнения
29
29
  valueOf() {
30
- return this.value;
30
+ return this.value
31
31
  }
32
32
 
33
33
  convert(params: ConvertParams) {
34
- return this.value.convert(params);
34
+ return this.value.convert(params)
35
35
  }
36
36
  }
37
37
 
38
38
  declare global {
39
39
  interface String extends CurrencyConverter {
40
- translate(language: string, ...args: any[]): Promise<string>;
40
+ translate(language: string, ...args: any[]): Promise<string>
41
41
  }
42
42
 
43
43
  interface Number extends CurrencyConverter {}
44
44
  }
45
45
 
46
46
  Number.prototype.convert = async function (this: number, params: ConvertParams): Promise<number> {
47
- const { to = 'RUB', from = 'RUB', round, ceiled } = params;
47
+ const { to = 'RUB', from = 'RUB', round, ceiled } = params
48
48
 
49
- const fromCurrency = from.toUpperCase();
50
- const currency = to.toUpperCase();
49
+ const fromCurrency = from.toUpperCase()
50
+ const currency = to.toUpperCase()
51
+
52
+ if (fromCurrency === 'TRX') {
53
+ const rates = await CoinBaseService.getInstance().getRates(fromCurrency)
54
+ const targetRate = rates[currency]
55
+
56
+ let convertedAmount = this * Number(targetRate)
57
+ if (!convertedAmount) convertedAmount = this
58
+
59
+ if (round) convertedAmount = Math.round(convertedAmount)
60
+ else if (ceiled) convertedAmount = Math.ceil(convertedAmount)
61
+
62
+ //@ts-ignore
63
+ return new ConvertedNumber(convertedAmount, `${convertedAmount.toLocaleString('ru', { maximumFractionDigits: 2 })} ${currency}`)
64
+ }
51
65
 
52
66
  if (currency === 'RUB' && fromCurrency === 'RUB') {
53
- const value = round ? Math.round(this) : ceiled ? Math.ceil(this) : this;
67
+ const value = round ? Math.round(this) : ceiled ? Math.ceil(this) : this
54
68
  //@ts-ignore
55
- return new ConvertedNumber(value, `${value.toLocaleString('ru', { maximumFractionDigits: 2 })} RUB`);
69
+ return new ConvertedNumber(value, `${value.toLocaleString('ru', { maximumFractionDigits: 2 })} RUB`)
56
70
  } else if (currency === 'RUB') {
57
- const rates = await CoinBaseService.getInstance().getRates('RUB');
58
- const targetRate = 1 / Number(rates[fromCurrency]);
71
+ const rates = await CoinBaseService.getInstance().getRates('RUB')
72
+ const targetRate = 1 / Number(rates[fromCurrency])
59
73
 
60
- let convertedAmount = this * Number(targetRate);
61
- if (!convertedAmount) convertedAmount = this;
74
+ let convertedAmount = this * Number(targetRate)
75
+ if (!convertedAmount) convertedAmount = this
62
76
 
63
- if (round) {
64
- convertedAmount = Math.round(convertedAmount);
65
- } else if (ceiled) {
66
- convertedAmount = Math.ceil(convertedAmount);
67
- }
77
+ if (round) convertedAmount = Math.round(convertedAmount)
78
+ else if (ceiled) convertedAmount = Math.ceil(convertedAmount)
68
79
 
69
80
  //@ts-ignore
70
- return new ConvertedNumber(convertedAmount, `${convertedAmount.toLocaleString('ru', { maximumFractionDigits: 2 })} ${currency}`);
81
+ return new ConvertedNumber(convertedAmount, `${convertedAmount.toLocaleString('ru', { maximumFractionDigits: 2 })} ${currency}`)
71
82
  }
72
83
 
73
- const rates = await CoinBaseService.getInstance().getRates(fromCurrency);
74
- const targetRate = rates[currency];
84
+ const rates = await CoinBaseService.getInstance().getRates(fromCurrency)
85
+ const targetRate = rates[currency]
75
86
 
76
- let convertedAmount = this * Number(targetRate);
77
- if (!convertedAmount) convertedAmount = this;
87
+ let convertedAmount = this * Number(targetRate)
88
+ if (!convertedAmount) convertedAmount = this
78
89
 
79
- if (round) {
80
- convertedAmount = Math.round(convertedAmount);
81
- } else if (ceiled) {
82
- convertedAmount = Math.ceil(convertedAmount);
83
- }
90
+ if (round) convertedAmount = Math.round(convertedAmount)
91
+ else if (ceiled) convertedAmount = Math.ceil(convertedAmount)
84
92
 
85
93
  //@ts-ignore
86
- return new ConvertedNumber(convertedAmount, `${convertedAmount.toLocaleString('ru', { maximumFractionDigits: 2 })} ${targetRate ? currency : 'RUB'}`);
87
- };
94
+ return new ConvertedNumber(convertedAmount, `${convertedAmount.toLocaleString('ru', { maximumFractionDigits: 2 })} ${targetRate ? currency : 'RUB'}`)
95
+ }
88
96
 
89
97
  String.prototype.convert = function (this: string, params: ConvertParams) {
90
- return Number(this).convert(params);
91
- };
98
+ return Number(this).convert(params)
99
+ }