commands/handlers/currency-handler.js

  1. const config = require('../../config.json');
  2. const { getCurrencyObject, getConversion, getCurrenciesList } = require('../../services/currency');
  3. const definition = {
  4. command_name: 'cur',
  5. args: [
  6. {
  7. name: 'amount',
  8. type: 'string',
  9. description: 'Сумма для конвертации.'
  10. },
  11. {
  12. name: 'from',
  13. type: 'string',
  14. description: 'Валюта из которой конвертировать.'
  15. },
  16. {
  17. name: 'to',
  18. type: 'string',
  19. description: 'Валюта в которую конвертировать.'
  20. }
  21. ],
  22. limit: 3,
  23. description: 'Возвращает результат конвертации суммы из одной валюты в другую.',
  24. is_inline: true,
  25. };
  26. const condition = (
  27. process.env.COINMARKETCAP_TOKEN
  28. && config.COINMARKETCAP_API
  29. ) || false;
  30. /**
  31. * `/cur` command handler
  32. * @param {Object} interaction
  33. * @returns {Object}
  34. */
  35. async function handler(interaction) {
  36. const args = interaction.args && interaction.args.slice(0, 3);
  37. if (args?.length !== 3) {
  38. return {
  39. type: 'error',
  40. text: `А где аргументы?\nПример использования <code>/cur 1 USD TRY</code>`
  41. };
  42. }
  43. let amount = Number(args[0]);
  44. if(isNaN(amount)) {
  45. return {
  46. type: 'error',
  47. text: `Неправильный первый аргумент, вместо <b>${args[0]}</b> должно быть число\nПример использования <code>/cur 1 USD TRY</code>`
  48. };
  49. }
  50. let from = getCurrencyObject(args[1].toUpperCase());
  51. if (!from) {
  52. return {
  53. type: 'error',
  54. text: `Не могу найти валюту <b>${args[1]}</b>\nПример использования <code>/cur 1 USD TRY</code>\nВот полная версия <a href="https://coinmarketcap.com/converter/">конвертора</a>`
  55. };
  56. }
  57. let to = getCurrencyObject(args[2].toUpperCase());
  58. if (!to) {
  59. return {
  60. type: 'error',
  61. text: `Не могу найти валюту <b>${args[2]}</b>\nПример использования <code>/cur 1 USD TRY</code>\nВот полная версия <a href="https://coinmarketcap.com/converter/">конвертора</a>`
  62. };
  63. }
  64. let result = null;
  65. try {
  66. result = await getConversion(amount, from.id, to.id);
  67. }
  68. catch (err) {
  69. interaction.logger.error(`Error while converting currency`, { interaction, error: err.stack || err });
  70. return {
  71. type: 'error',
  72. text: `Что-то пошло не так\nВот полная версия <a href="https://coinmarketcap.com/converter/">конвертора</a>`
  73. };
  74. }
  75. if(!result) {
  76. return {
  77. type: 'error',
  78. text: `Что-то пошло не так\nВот полная версия <a href="https://coinmarketcap.com/converter/">конвертора</a>`
  79. };
  80. }
  81. return {
  82. type: 'text',
  83. text: `${result[from.id]} ${from.name} = ${result[to.id].toFixed(2)} ${to.name}`
  84. };
  85. }
  86. module.exports = {
  87. handler,
  88. definition,
  89. condition
  90. }